package com.engineering.elink.service;

import java.util.List;
import java.util.Map;

import com.engineering.elink.co.recruit.JobAddCo;
import com.engineering.elink.co.recruit.JobCo;
import com.engineering.elink.co.recruit.JobSearchCo;
import com.engineering.elink.domain.recruit.FunctionsTopCategory;
import com.engineering.elink.domain.recruit.Language;
import com.engineering.elink.domain.recruit.LanguageGrade;
import com.engineering.elink.domain.recruit.MajorSecondCategory;
import com.engineering.elink.domain.recruit.MajorTopCategory;
import com.engineering.elink.domain.recruit.ProfessionalDetailCategory;
import com.engineering.elink.vo.recruit.DictCategoryVo;
import com.engineering.elink.vo.recruit.FunctionsDetailCategoryVo;
import com.zxy.core.co.BaseCo;

/**
 * 职位相关业务操作接口
 * 
 * ClassName: JobService <br/> 
 * Function: ADD FUNCTION. <br/> 
 * Reason: ADD REASON(可选). <br/> 
 * date: 2016年11月23日 下午3:59:55 <br/> 
 * 
 * @author zengxinyan 
 * @version  
 * @since JDK 1.8
 */
public interface JobService {

	/**
	 * 按编码获取字典分类信息
	 * 
	 * getJobNature:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @return 
	 * @since JDK 1.8
	 */
	List<DictCategoryVo> getDictCategoryByCode(String dictCode,Integer type);
	
	/**
	 * 获取职能的一级分类
	 * 
	 * getFunctionsTopCategory:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @return 
	 * @since JDK 1.8
	 */
	List<FunctionsTopCategory> getFunctionsTopCategory();
	
	/**
	 * 获取职能的详情分类
	 * 
	 * getFuncDetailCategoryByFtcId:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param ftcId
	 * @return 
	 * @since JDK 1.8
	 */
	List<FunctionsDetailCategoryVo> getFuncDetailCategoryByFtcId(Integer ftcId);
	
	/**
	 * 获取所有语言
	 * 
	 * getLanguage:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @return 
	 * @since JDK 1.8
	 */
	List<Language> getLanguage();
	
	/**
	 * 获取所有专业一级分类
	 * 
	 * getMajorTopCategory:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @return 
	 * @since JDK 1.8
	 */
	List<MajorTopCategory> getMajorTopCategory();
	
	/**
	 * 通过专业一级分类获取二级分类
	 * 
	 * getMajorScByMdcId:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param mdcId
	 * @return 
	 * @since JDK 1.8
	 */
	List<MajorSecondCategory> getMajorScByMdcId(Integer mdcId);
	
	/**
	 * 通过专业二级分类ID获取详情分类
	 * 
	 * getProfessionalByMscId:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param mscId
	 * @return 
	 * @since JDK 1.8
	 */
	List<ProfessionalDetailCategory> getProfessionalByMscId(Integer mscId);
	
	/**
	 * 获取所有语言等级
	 * 
	 * getLanguageGrade:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @return 
	 * @since JDK 1.8
	 */
	List<LanguageGrade> getLanguageGrade();
	
	/**
	 * 发布职位
	 * 
	 * add:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param addCo
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> add(JobAddCo addCo,String userId);
	
	/**
	 * 暂停发布
	 * 
	 * pause:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> pause(String jobId);
	
	/**
	 * 单个职位详情
	 * 
	 * get:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobId
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> get(String jobId,String userId);
	
	/**
	 * 修改职位
	 * 
	 * update:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobId
	 * @param addCo
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> update(String jobId,JobAddCo addCo,String userId);
	
	/**
	 * 批量删除职位
	 * 
	 * deleteJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobIds
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> deleteJob(String jobIds);
	
	/**
	 * 刷新职位
	 * 
	 * refreshJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobIds
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> refreshJob(String jobIds);
	
	/**
	 * 职位列表
	 * 
	 * getJobsList:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param co
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> getJobsList(JobCo co,String userId);
	
	/**
	 * 该公司的其他职位
	 * 
	 * getCompanyJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param companyId
	 * @param count
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> getCompanyJob(String jobId,Integer count,String userId);
	
	/**
	 * 相似职位
	 * 
	 * getSameJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobName
	 * @param count
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> getSameJob(String jobId,Integer count,String userId);
	
	/**
	 * 立即投递
	 * 
	 * deliveryJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param addCo
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> deliveryJob(String jobId,String userId);
	
	/**
	 * 投递的简历
	 * 
	 * getMyDeliveryJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param fullName
	 * @param co
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> getMyDeliveryJob(String fullName,BaseCo co,String userId);
	
	/**
	 * 批量意向公司
	 * 
	 * targetJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param jobIds
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> targetJob(String jobIds,String userId);
	
	/**
	 * 收藏职位
	 * 
	 * getMyCollectionJob:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param co
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> getMyCollectionJob(BaseCo co,String userId);
	
	/**
	 * 简历管理－搜索职位
	 * 
	 * getSearchJobList:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param co
	 * @param userId
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String,Object> getSearchJobList(JobSearchCo co,String userId);
	
	/**
	 * 获取热搜词
	 * 
	 * getKeyWord:(这里用一句话描述这个方法的作用). <br/> 
	 * (这里描述这个方法适用条件 – 可选).<br/> 
	 * (这里描述这个方法的执行流程 – 可选).<br/> 
	 * (这里描述这个方法的使用方法 – 可选).<br/> 
	 * (这里描述这个方法的注意事项 – 可选).<br/> 
	 * 
	 * @author zengxinyan 
	 * @param count
	 * @return 
	 * @since JDK 1.8
	 */
	Map<String, Object> getKeyWord(int count);
	
}
